{"nbformat":4,"nbformat_minor":0,"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.6.1"},"colab":{"name":"0-2-functional-API.ipynb","provenance":[],"collapsed_sections":[]}},"cells":[{"cell_type":"code","metadata":{"id":"2hyfcFBYiKfW","executionInfo":{"status":"ok","timestamp":1605303342554,"user_tz":420,"elapsed":2982,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["from sklearn.datasets import load_digits\n","from tensorflow.keras.utils import plot_model\n","from tensorflow.keras.models import Sequential, Model\n","from tensorflow.keras.layers import *"],"execution_count":1,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"EkNm9d5jiKfi"},"source":["### Load dataset\n","- digits dataset in scikit-learn\n","- url: http://scikit-learn.org/stable/auto_examples/datasets/plot_digits_last_image.html"]},{"cell_type":"code","metadata":{"id":"QBVR4mHtiKfj","executionInfo":{"status":"ok","timestamp":1605303347212,"user_tz":420,"elapsed":525,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["data = load_digits()"],"execution_count":2,"outputs":[]},{"cell_type":"code","metadata":{"id":"EX-QuhTIiKfp","executionInfo":{"status":"ok","timestamp":1605303347507,"user_tz":420,"elapsed":521,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["X_data = data.images\n","y_data = data.target"],"execution_count":3,"outputs":[]},{"cell_type":"code","metadata":{"id":"DD04r6mdiKft","executionInfo":{"status":"ok","timestamp":1605303347883,"user_tz":420,"elapsed":401,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["# flatten X_data\n","X_data = X_data.reshape(X_data.shape[0], X_data.shape[1]*X_data.shape[2])"],"execution_count":4,"outputs":[]},{"cell_type":"code","metadata":{"id":"ntPoiP3QiKfw","executionInfo":{"status":"ok","timestamp":1605303348358,"user_tz":420,"elapsed":356,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"68410278-751b-4e75-aea6-a092ef4afc85","colab":{"base_uri":"https://localhost:8080/"}},"source":["# shape of data\n","print(X_data.shape)\n","print(y_data.shape)    "],"execution_count":5,"outputs":[{"output_type":"stream","text":["(1797, 64)\n","(1797,)\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"cr2FP1PeiKfz"},"source":["## Model Functional API\n","- Creating models by Sequential API is easy and simple, but it is impossible to create complicated model structures\n","- For instance, inception or residual net structure is impossible to implement using Sequential API since they require operations such as layer merging and multiple outputs\n","- In this case, one could take advantage of Functional API\n","    - Create model by defining inputs and outputs"]},{"cell_type":"markdown","metadata":{"id":"95Z58Y3xiKfz"},"source":["### Single input & output\n","- Model with only single input & output\n","- Such structure is able to create using Sequential API as well"]},{"cell_type":"code","metadata":{"id":"frmcQ_s6iKf0","executionInfo":{"status":"ok","timestamp":1605303365575,"user_tz":420,"elapsed":579,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["# creating layers\n","input_layer = Input(shape = X_data.shape[1:])\n","activation_1 = Activation('relu')(input_layer)\n","hidden_layer = Dense(50)(activation_1)\n","activation_2 = Activation('relu')(hidden_layer)\n","output_layer = Dense(10, activation = 'softmax')(activation_2)"],"execution_count":6,"outputs":[]},{"cell_type":"code","metadata":{"id":"H02EcP_yiKf2","executionInfo":{"status":"ok","timestamp":1605303365763,"user_tz":420,"elapsed":377,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}}},"source":["# creating model\n","model = Model(inputs = input_layer, outputs = output_layer)"],"execution_count":7,"outputs":[]},{"cell_type":"code","metadata":{"id":"z_PmiGf5iKf6","executionInfo":{"status":"ok","timestamp":1605303366146,"user_tz":420,"elapsed":231,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"332a4469-d3b0-4b0d-b6c5-d504ba788e21","colab":{"base_uri":"https://localhost:8080/"}},"source":["model.summary()"],"execution_count":8,"outputs":[{"output_type":"stream","text":["Model: \"functional_1\"\n","_________________________________________________________________\n","Layer (type)                 Output Shape              Param #   \n","=================================================================\n","input_1 (InputLayer)         [(None, 64)]              0         \n","_________________________________________________________________\n","activation (Activation)      (None, 64)                0         \n","_________________________________________________________________\n","dense (Dense)                (None, 50)                3250      \n","_________________________________________________________________\n","activation_1 (Activation)    (None, 50)                0         \n","_________________________________________________________________\n","dense_1 (Dense)              (None, 10)                510       \n","=================================================================\n","Total params: 3,760\n","Trainable params: 3,760\n","Non-trainable params: 0\n","_________________________________________________________________\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"uA8IVBbTiaPJ","executionInfo":{"status":"ok","timestamp":1605303381470,"user_tz":420,"elapsed":621,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"8e609b6c-885a-4145-9951-bc3e83c2020b","colab":{"base_uri":"https://localhost:8080/","height":466}},"source":["plot_model(model)"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\n","text/plain":["<IPython.core.display.Image object>"]},"metadata":{"tags":[]},"execution_count":9}]},{"cell_type":"markdown","metadata":{"id":"3hWog-F_iKf8"},"source":["### Merging layers\n","- Sometimes, it is necessary to merge layers (e.g., GoogleNet or ResNet)"]},{"cell_type":"markdown","metadata":{"id":"W3eKtmYwiKf8"},"source":["#### 1. concatenate\n","- concatenate() simply merges results of two or more layers\n","- For instance, assume there are two layers to be concatenated, whose results are\n","**[x1, x2, ..., xn]** and **[y1, y2, ..., yn]**. Then, concatenated layer would be **[x1, ..., xn, ..., y1, ..., yn]**"]},{"cell_type":"code","metadata":{"id":"ToXC8At8iKf9","executionInfo":{"status":"ok","timestamp":1605303457708,"user_tz":420,"elapsed":353,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"87d0af12-45f5-4f4a-a46b-a0acfe334ff3","colab":{"base_uri":"https://localhost:8080/"}},"source":["# creating layers\n","input_layer = Input(shape = X_data.shape[1:])\n","activation_1 = Activation('relu')(input_layer)\n","hidden_layer_1 = Dense(50, activation = 'relu')(activation_1)\n","hidden_layer_2 = Dense(50, activation = 'relu')(activation_1)\n","concat_layer = concatenate([hidden_layer_1, hidden_layer_2])\n","print(hidden_layer_1.shape)\n","print(hidden_layer_2.shape)\n","print(concat_layer.shape)"],"execution_count":14,"outputs":[{"output_type":"stream","text":["(None, 50)\n","(None, 50)\n","(None, 100)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"OxIkijhiikoe","executionInfo":{"status":"ok","timestamp":1605303458994,"user_tz":420,"elapsed":374,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"14ab8d7a-2adf-4fc8-887b-31551051ac30","colab":{"base_uri":"https://localhost:8080/","height":369}},"source":["model = Model(inputs = input_layer, outputs = concat_layer)\n","plot_model(model)"],"execution_count":15,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\n","text/plain":["<IPython.core.display.Image object>"]},"metadata":{"tags":[]},"execution_count":15}]},{"cell_type":"markdown","metadata":{"id":"bIsZDsPbiKf_"},"source":["#### 2. add, subtract, multiply, average, maximum\n","- Such layers perform element-wise operations over all corresponding elements of two or more layers\n","- Hence, dimensionality of the input layers are preserved"]},{"cell_type":"code","metadata":{"id":"dxJlDPqxiKf_","executionInfo":{"status":"ok","timestamp":1605303464695,"user_tz":420,"elapsed":455,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"1e4efe10-7a39-4d40-930f-959529d06a6a","colab":{"base_uri":"https://localhost:8080/"}},"source":["# creating layers\n","input_layer = Input(shape = X_data.shape[1:])\n","activation_1 = Activation('relu')(input_layer)\n","hidden_layer_1 = Dense(50, activation = 'relu')(activation_1)\n","hidden_layer_2 = Dense(50, activation = 'relu')(activation_1)\n","add_layer = add([hidden_layer_1, hidden_layer_2])\n","print(hidden_layer_1.shape)\n","print(hidden_layer_2.shape)\n","print(add_layer.shape)"],"execution_count":16,"outputs":[{"output_type":"stream","text":["(None, 50)\n","(None, 50)\n","(None, 50)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"QBvyaUnFivUg","executionInfo":{"status":"ok","timestamp":1605303469115,"user_tz":420,"elapsed":339,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"dd494e69-8682-4305-aef7-ebc4a55b3e72","colab":{"base_uri":"https://localhost:8080/","height":369}},"source":["model = Model(inputs = input_layer, outputs = add_layer)\n","plot_model(model)"],"execution_count":17,"outputs":[{"output_type":"execute_result","data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAVIAAAFgCAIAAABmBWYeAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO3deVwTd/4/8M+QkAsSDgVBEdTgF1Q8qhWBgFixWi9aOYSKuljdUs96Fi+s9azSXXS9dl2PVhRB0UpVQAUVEAFttYIiCqigIoKgBAlIjvn9Mbv5sRzhCvkkmffzjz7MzOQz7xnm1TkzH4IkSQQAoBMD3AUAADQNYg8A7UDsAaAdiD0AtMPEXYCm+fv74y4BaB1XV9fly5fjrkJzaBf72NhYFxcXGxsb3IUAbZGZmYm7BE2jXewRQsuWLZs+fTruKoC2oOEBIJzbA0A7EHsAaAdiDwDtQOwBoB2IPQC0A7EHgHYg9gDQDsQeANqB2ANAOxB7AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPbNiI+PNzExOX/+PO5CGpNKpdu2bbO3t2exWKampk5OTs+ePWv1W5mZmQMGDDAwMCAIokePHlu2bOn6Sv/jzJkz/fr1IwiCIAgrK6uZM2dqbNZABTr+3r5VWvsS8YCAgNzc3BMnTowYMaK8vPybb755//59q99ycXF5+PDhZ599dunSpUePHpmammqgVIqvr6+vr6+9vf2bN29KS0s1Nl+gGsS+GZMnT66qqtLAjGpra728vG7evNmWiaOjo8+dO3fv3r3BgwcjhKytrePi4rq4wI5o10IBLOAgH6fDhw+XlZW1ceIDBw4MHz6cyrw2a9dCASwg9o3duHHD1taWIIi9e/cihPbv329kZMTj8eLi4iZOnCgQCGxsbE6ePElN/I9//IPD4VhaWn7zzTfW1tYcDsfNzS0rK4sau2TJEhaLZWVlRX1cuHChkZERQRBv3rxBCC1dunTFihWFhYUEQdjb26uuqr6+PjMzc9iwYS1NkJiYKBAItm7d2pZl1JKFUkpLSxs4cKCJiQmHwxk8ePClS5cQQvPmzaMuCgiFwrt37yKE5syZw+PxTExMfvvtN4SQXC7fsGGDra0tl8sdMmRITEwMQmjnzp08Ho/P55eVla1YsaJXr16PHj1qYxk0QtIMQigmJkb1NM+fP0cI7dmzh/q4bt06hFBycnJVVVVZWZmHh4eRkVF9fT01NiQkxMjIKDc3t66u7sGDByNHjuTz+cXFxdTYoKCgHj16KFsODw9HCJWXl1MffX19hUJhW8p++vQpQmjYsGFjxoyxsrJis9mOjo579+5VKBTUBBcuXODz+Zs2bWqphQkTJiCE3r59q/mFEgqFJiYmKpbu9OnTGzdurKysrKiocHFx6datm7IpBoPx8uVL5ZQzZsz47bffqH+vXLmSzWbHxsa+fft27dq1BgYGt2/fVi7at99+u2fPHh8fn4cPH6pet35+fn5+fqqn0TOwt28rNzc3gUBgYWERGBhYU1NTXFysHMVkMgcMGMBmswcOHLh///7q6uqjR4+qd+7UpTsLC4utW7c+ePDg9evXX3zxxaJFi6KioqgJJk+eLBaLw8LC2tUs3oVS8vPz+/77783MzMzNzb29vSsqKsrLyxFC8+fPl8vlyvmKxeLbt29PmjQJIVRXV7d///5p06b5+vqampquX7/e0NCwYYU//vjjokWLzpw54+jo2EVl6y6IfbuxWCyEkFQqbXbsxx9/zOPx8vLy1DtTNpuNEBo0aJCbm5u5ubmJickPP/xgYmJy8OBBtbSPZaGaZWhoiBCSy+UIobFjx/7f//3fkSNHSJJECEVHRwcGBjIYDITQo0ePJBKJk5MT9S0ul2tlZaWZCvUAxF792Gw2tbNSI2tra4QQdf5MYbFYdnZ2hYWF6p1RS7pioZQuXrw4ZswYCwsLNpv93XffKYcTBPHNN988efIkOTkZIXTs2LG5c+dSo2pqahBC69evJ/6rqKhIIpF0UYV6BmKvZlKp9N27d2rvfsPY2Lh///65ubkNB8pkMhMTE/XOqFldsVCpqakREREIoeLi4mnTpllZWWVlZVVVVe3YsaPhZMHBwRwO59ChQ48ePRIIBHZ2dtRwCwsLhFBERETDU9aMjAw1VqjHIPZqdv36dZIkXVxcqI9MJrOlI+f2CggIuHv37pMnT6iPEomkqKhIM/fzumKh/vjjDyMjI4RQTk6OVCpdsGBBv379OBwOQRANJzMzMwsICDh37txPP/3017/+VTm8d+/eHA7nzz//7GQZ9ASxVwOFQvH27VuZTJadnb106VJbW9vg4GBqlL29fWVl5blz56RSaXl5eVFRUcMvmpubl5SUPHv2rLq6utUgLV++3M7OLjg4uLi4uKKiIjQ0tLa2dvXq1dTYhISEtt/Aw7tQUqn09evX169fp2Jva2uLEEpKSqqrq8vPz1feKVSaP3/+hw8fLly4MHXqVOVADoczZ86ckydP7t+/XywWy+XyFy9evHr1Sl2Lr+ew3D/ACLV2A2/Pnj3UTWkej+ft7b1v3z4ej4cQ6t+/f2Fh4cGDBwUCAULIzs7u8ePHJEmGhIQYGhr26tWLyWQKBIIvvviisLBQ2VpFRcUnn3zC4XD69u27ePHiVatWIYTs7e2pm2F37tyxs7Pjcrnu7u6lpaWtFv/8+fMvv/zSzMyMzWY7OzsnJCQoR8XHx/P5/C1btjT9VmZm5qBBgwwMDBBCVlZWW7du1dhCHThwQCgUtrTtnT17lmowNDTU3Nzc1NTU39+felxCKBQq7xeSJPnRRx+tWbOm0XJ9+PAhNDTU1taWyWRaWFj4+vo+ePBgx44dXC4XIdS7d+/IyMhWVylJyxt4EPvOCgkJMTc3V2OD2kDbFmrSpElPnjzposZpGHs4yFcD6m6TnsG+UMoThOzsbOrIAm89+gRirxXy8vKIlgUGBuIuEIPQ0ND8/PzHjx/PmTNn8+bNuMvRKxD7Tlm7du3Ro0erqqr69u0bGxvb4XYcHR1VHJJFR0erseZWqWuhOonH4zk6Oo4bN27jxo0DBw7EVYZeIkht/W15FyEIIiYmBvq3B0pU//anT5/GXYjmwN4eANqB2ANAOxB7AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPYA0A7EHgDagdgDQDsQewBoB2IPAO1A7AGgHTr+As/FxUXtb7YFuiszM9PFxQV+gafP/Pz8IPMIoZKSEqonOeDi4uLq6oq7Co2i3d4eUE6dOhUQEAB/fXqi3d4eAACxB4B2IPYA0A7EHgDagdgDQDsQewBoB2IPAO1A7AGgHYg9ALQDsQeAdiD2ANAOxB4A2oHYA0A7EHsAaAdiDwDtQOwBoB2IPQC0A7EHgHYg9gDQDsQeANqB2ANAOxB7AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPYA0A7EHgDagdgDQDsQewBoB2IPAO1A7AGgHYg9ALRDkCSJuwagCS9fvpw6dapUKqU+1tTUlJeX9+nTRznBsGHDIiMj8RQHNIuJuwCgIb169aqrq3v48GHDgffv31f+OyAgQONFATzgIJ9GZs+ezWS2+D96iD19wEE+jRQXF/fp06fpX5wgiI8++uiPP/7AUhXQPNjb04itre3IkSMNDBr/0RkMxuzZs7GUBLCA2NPL7NmzCYJoNFAul/v7+2OpB2ABsaeX6dOnNxrCYDA8PT179uyJpR6ABcSeXiwsLMaMGcNgMBoOnDVrFq56ABYQe9qZNWtWw6t6BgYGPj4+GOsBmgexpx0fHx/lbTwmkzlx4kRTU1O8JQENg9jTDp/PnzJliqGhIUJILpfPnDkTd0VA0yD2dBQUFCSTyRBCHA5nypQpuMsBmgaxp6NJkybxeDyEkK+vL5fLxV0O0DQ9eSb/1KlTuEvQMSNHjrx+/Xrv3r1h1bVL7969XV1dcVfRWXrycG7TR1AA6Ap+fn6nT5/GXUVn6c9BfkxMDAnaTCaTbdq0CXcVOsbPzw/3Zq4e+hN70C4MBmPNmjW4qwB4QOzpS8WPcIF+g9gDQDsQewBoB2IPAO1A7AGgHYg9ALQDsQeAdiD2ANAOxB4A2oHYA0A7EHsAaAdiDwDtQOwBoB2IfVvFx8ebmJicP39ey9tsiVQq3bZtm729PYvFMjU1dXJyevbsWbtaiIqKIgjCzc2tM2Xo+mrUDxD7tiK74H0kXdFmSwICAo4dO3bixAmJRPLw4UOhUPj+/ft2tRAVFSUUCjMyMgoKCjpchq6vRj2B970F6oK64DUbEonE1dVV+9tsi5MnTxIEkZ2d3eEW3rx507dv3+PHjyOEwsLC2v5FfVqNfn5+fn5+mp+v2sHevkWHDx8uKyvT/jbb4sCBA8OHDx88eHCHWzh16tTkyZO9vb05HE5kZCTZ5h2sPq1G/YH7/zvqgdqwt09NTR0wYIBAIGCz2U5OTomJicpRx44dGzFiBJvN5vF4dnZ2mzZt+vbbb1ksFrWKhEJhWlpa7969EUJ79uwhSdLR0REhRBDE8OHDa2pqSJJctWoV1fLRo0dbmpfqNkmSVCgUf/vb3xwdHanT788///zhw4fUqH379vF4PC6Xe+7cuc8++4zP5/fq1SsqKqotK+fDhw8sFmvu3LktTZCQkMDn87ds2aKiEXd396tXr5Ik6e3tjRBKSUlpOo1+r0ZSj/b2NIr96dOnN27cWFlZWVFR4eLi0q1bN2p4REQEQmj79u0VFRWVlZX/+te/goKCSJL09fUVCoXKrz9//ly5bclksj59+tja2spkMuUEy5Yti4iIUD0vFW2SJLlhwwYWixUZGfnu3bvs7Ozhw4d37969tLSUGrtu3TqEUHJyclVVVVlZmYeHh5GRUX19fasr5+nTpwihYcOGjRkzxsrKis1mOzo67t27V6FQUBNcuHCBz+ereLVeUVGRhYUFtbCRkZEIoab/E9H71UhC7LVNW2Lf0LZt2xBCZWVl9fX1pqamn3zyiXKUTCbbtWsX2dq2RW3lp06doj7W1NTY2tpWVVWpmJfqNiUSibGxcWBgoHLsrVu3EELKNFLba21tLfVx3759CKGCgoJWFzYnJwch9Omnn6anp1dUVLx792716tUIoePHj7dlXZEkuX379jlz5lD/rqqqYrPZAoFAIpEoJ6DDaiT1KPY0PbdXdgWVnZ397t27CRMmKEcxGIxvv/221RbmzZtnYmKya9cu6uPx48e/+OILgUCgYl6qG3zw4MH79+8//vhj5ZCRI0eyWKysrKxmp6cOdKVSaaulstlshNCgQYPc3NzMzc1NTEx++OEHExOTgwcPtvpdSlRUlLJ7TIFAMH78eLFYHBcXp5yADqtRn9Ao9hcvXhwzZoyFhQWbzf7uu++ogWKxGCHUgb4fjY2Nv/7665s3b1I7kwMHDixZskT1vFR79+4d1WzDgaamptXV1e2trRFra2uE0Js3b5RDWCyWnZ1dYWFhW75+//79nJycqVOnEv9F3SE/duyYcho6rEZ9QpfYFxcXT5s2zcrKKisrq6qqaseOHdTwnj17ov+NRNstWbLE0NAwIiIiNTW1d+/eQqFQ9bxUozLTaOt89+6djY1NB2pryNjYuH///rm5uQ0HymQyExOTtnz9xIkTX375ZcNDxMrKSi6Xe/ny5dLSUmoaOqxGfUKX2Ofk5Eil0gULFvTr14/D4Sh70enTp4+5ufnly5c70KaNjc306dNjY2PDwsKWLl3a6rxUc3JyMjY2/v3335VDsrKy6uvrR4wY0YHaGgkICLh79+6TJ0+ojxKJpKioqC3380iSjI6OXrhwYcOBZmZm/v7+crk8KiqKGkKT1ag36BJ7W1tbhFBSUlJdXV1+fr7yTI/NZq9duzY1NXXJkiUvX75UKBTV1dXUjtHc3LykpOTZs2fV1dUtnfutWLFCJpO9fft27Nixrc5LdZscDmfFihVnz549fvy4WCzOycmZP3++tbV1SEhI5xd/+fLldnZ2wcHBxcXFFRUVoaGhtbW11IU9hFBCQoJAINi6dWvTL968eVMgEIhEokbD58+fjxoc59NkNeoPTJcS1Qy14Up+aGioubm5qampv7//3r17EUJCobC4uJgkyb179w4ePJjD4XA4nI8++mjfvn0kSd65c8fOzo7L5bq7u69fv97KygohxOPxvL29Gzb7ySefHDp0qI3zUt2mQqEIDw/v37+/oaGhmZnZtGnTHj16RDVI3XBGCPXv37+wsPDgwYPUdS87O7vHjx+3ZRU9f/78yy+/NDMzY7PZzs7OCQkJylHx8fHN3refO3eukZERk8kcOnTonTt3lMM3b95MXS9ACPXq1YtaXXRYjXpzJV9/ur6MiYmZPn067kKAPvP390cIQdeXAADdA7HXeXl5eUTLAgMDcRcItA50fqjzHB0d9eNMDWgM7O0BoB2IPQC0A7EHgHYg9gDQDsQeANqB2ANAOxB7AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPYA0A7EHgDagdgDQDv688PbjIwM3CVoFEmSbXyrpH7XoEkvXrzQjzfw6s9LtXCXAGjBz89PD16qpSexp5W4uDhfX99NmzatXbsWYxm1tbXjx49/9uxZeno69ZZboCsg9jomJSXls88+mzNnzv79+3HXgqqqqkaPHi2Xy9PS0szMzHCXA9oKYq9LcnJyPD09PT09Y2NjGQwG7nIQQujly5dubm49e/ZMTk6m3kUNtB/EXmc8ffpUJBI5ODgkJiZSvVlqidzcXA8PD5FIdPbsWSZTfy4S6zGIvW548+aNu7s7i8VKTU3tQA+TXS0rK8vLy2vGjBlt70UXYAT37XWARCLx9vaWSqWXL1/WwswjhEaNGhUdHX306NGNGzfirgW0Dg7JtJ1UKvX19c3Pz79x4wbV65N2mjJlypEjR/7yl7+Ym5s37KwaaCGIvVYjSfLrr79OT0+/du2ag4MD7nJaMWvWrKKiomXLlllbW1P9RgHtBLHXaqtWrTpx4sT58+d1pZ/m9evXv3nzZubMmWZmZuPGjcNdDmgBpi43Qet27txJEMQvv/yCu5D2kcvl06dPFwgEDTvJBVoFruRrqaioqFmzZv3000/Lli3DXUu71dfXT5ky5f79+zdv3uzTpw/uckBjEHttlJycPGnSpGXLlv3444+4a+kgsVg8ZsyY6urqGzdu9OjRA3c54H9A7LXO7du3x44d+/nnn0dGRur0T4zKy8tFIpGJicm1a9eMjY1xlwP+P4i9dikoKHB3dx8xYkRcXJwePPFWWFgoEomcnJwuXryoVU8W0hzEXouUlJSIRCJLS8vk5GS92T3+/vvvY8eOnTJlyvHjxw0M4PEwrQB/Bm0hFosnT57MZDLPnz+vN5lHCH388cfnzp07e/ZsaGgo7lrAf+j8YaR+qK+v9/X1LSsrS09Pt7S0xF2Omo0dO/bnn38OCgqysrJasWIF7nIAxF4LKBSKoKCg27dvp6Sk6OvtrsDAwMrKykWLFnXr1i04OBh3OXQHscdv2bJlFy5cuHz58tChQ3HX0oUWLFhQVFT09ddf9+jRY+LEibjLoTesDwsBcuPGjQwGIzY2FnchmqBQKObMmcPj8W7evIm7FlqDK/k4HTx4MCQkZM+ePYsWLcJdi4ZIpdIvvvji1q1baWlpjo6OuMuhKYg9NufPn/fx8dmwYUNYWBjuWjSqtrZ23Lhxz58/T09P7927N+5y6Ahij0dmZqaXl9esWbP++c9/4q4Fg4qKCnd3dyaTmZqaCu/e1DyIPQYPHjzw8PDw8PA4e/aslrwJU/NevHjh5ubWr1+/xMREDoeDuxx6gdhrGmzuSvC/P1wg9hpVUVHh4eHBYDDg4JZC85MdXOC+vebU1tZ6e3u/f/8+PT0dMk9xcXGJjo728fHp1asX3S5tYsSAV51qhlQq9fHxyc7OvnbtmlAoxF2OFnFwcKAe2u3evbuzszPucmgB9vaaQJJkSEjI9evXk5KS4GZ1U19//fWrV6+WLl1qbW3t6+uLuxz9B7HXhNWrVx8/fjwuLs7V1RV3LVrq+++/r6ysnDlzpqWlpYeHB+5y9Bxc0uty+/fvX7Ro0ZEjR+AnKKopFIqAgIArV66kpKTo988TsIPYd63o6OigoKCdO3fCD07bor6+fvLkybm5uenp6fr6Y0RtALHvQlevXp00adLixYvDw8Nx16IzxGKxp6cndb9D/149oCUg9l0FXibVYXr5cjGtApujGly+fLnRkMLCwilTpjg7Ox89ehQy3149e/a8cuVKUVFRQECATCZrOKqqqurWrVu4CtMfmH7wqz9evHjBYDAWLlwol8upIWVlZf379//444+rq6vx1qbTbt26ZWxsHBQUpFAoqCElJSUDBgxwdXXFW5gegNh3VlhYGIPBMDAw8PX1raurq6qqGj58uL29fWlpKe7SdF5SUhKLxVq9ejVJko8ePbKxsaEe3b937x7u0nQbnNt3Sn19vbW1dWVlJUKIyWSOGjWKxWLl5eVBJ1DqQnUKtmTJkl9++aW6ulomkxkaGgYHBx88eBB3aToMYt8pJ06cmDVrlnIdMplMQ0PDuLi4Tz/9FG9h+iQkJOTIkSMkScrlcmoIm80uKSkxNzfHW5jugqtNnbJ79+6GV+xkMplMJvvqq68eP36MsSp9cvz48cOHDysUCmXmEUJyufyXX37BWJWug719x929e3f48OFNhzOZTCMjo8TERBcXF81XpU92795NdfjbdCu1tbV9+vQp3CXpGFhrHbdnzx5DQ8Omw2UymVgs9vLySk5O1nxVemPlypVLly6lLkE1HVtcXNz0viloI4h9B1VWVp44cUIqlTYdxWQyGQzG3Llz4cHyzpg+fbq7uztCqNkX7zCZzN27d2u8KD0Bse+gQ4cOKRSKRgOZTCZBEN7e3g8fPvzHP/7RvXt3LLXpB2dn57S0tCtXrjg4OBgYGDTq81smk126dCk/Px9XeToNYt8RCoViz549DR8go04yP/roo7S0tDNnztjb2+OrTq+MGzcuJycnOjq6Z8+ejXr+ZjKZcBuvg3A9MKDTfvvtN+UKJAjCwMDA3t7+1KlTuOvSZzU1NT/++KOxsXHD6ynGxsY1NTW4S9M9sLfviN27d1MnnEwm08LC4sCBA3l5ef7+/rjr0mc8Hi80NLSoqGj58uWGhoZU+CUSycmTJ3GXpnvgBl675efnOzg4kCRpZGS0bt26b7/9lsfj4S6KXgoLC9esWUN1HOjk5JSTk4O7Il3TcNcfExODuxygNmo5GvTz88O9HEANYmJiGv5Zm3mXHoRfhfr6+l9++WXq1KlWVla4a2lRRkbGrl271NWai4sL9cyMdsrJyXn69Km3tzfuQrRXQEBAoyHNxH769OkaKUZXzZw5E3cJrVNj7G1sbLR5k9Dm2rRE09jDJT0AaAdiDwDtQOwBoB2IPQC0A7EHgHYg9gDQDsQeANqB2ANAOxB7AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPYA0E5nYz9v3jw+n08QxJ9//qmWgtRFoVBERES4ubk1HXXjxg2RSMTj8aytrUNDQz98+NCWBs+cOdOvXz+iARaLZWlpOWbMmPDw8Ldv36p7CXSVLm4SKka1RLe3h6Zv12nvC1iol5ndvXu3s29yUZ/Hjx+LRCKE0NChQxuNun//PpfLDQsLe//+/c2bN7t37z5nzpy2tywUCk1MTEiSVCgUb9++vXbtWnBwMEEQ1tbWt2/fVucydELH/o7N8vPz8/Pza++3dGuTUDGqVTqxPaAmb9fRw4P8e/furV69ev78+cOGDWs6dvPmzVZWVj/88IORkZGrq2toaOjPP/+cl5fX3rkQBGFqajpmzJijR4+eOnXq9evXkydPrqqqUscSADVTsUmo3lraTre2BzXEvlG/BdgNHTr0zJkzQUFBbDa70SiZTHbx4kVPT09lzRMnTiRJMi4urjNz9PPzCw4OLisr++c//9mZdvSGDm0SKkZ1mPZvDx2JPUmS4eHhDg4ObDbbxMRk1apVDcfK5fINGzbY2tpyudwhQ4ZQB5z79+83MjLi8XhxcXETJ04UCAQ2NjYNX3WckpLi7OzM4/EEAsHgwYPFYnFLTXXGkydP3r9/b2trqxwiFAoRQtnZ2dTHxMREgUCwdevW9rYcHByMEEpISKA+avNK6Aq6u0moprfbQ8Mj/jaeE65bt44giL/97W9v376VSCT79u1DDU7kVq5cyWazY2Nj3759u3btWgMDA+okZ926dQih5OTkqqqqsrIyDw8PIyOj+vp6kiTfv38vEAh27NhRW1tbWlrq4+NTXl6uoqk2GjVqVKOztZSUFIRQeHh4w4FcLtfLy4v694ULF/h8/qZNm1pqU3ku1wj1J+ndu7c2rATNn9vr7iahepR+bA+oybl9u2MvkUh4PN6nn36qHNLw+k1tbS2PxwsMDFROzGazFyxYoFzC2tpaahS1ZRQUFJAkef/+fYTQhQsXGs5IRVNt1PQPSfWR+ve//73hQIFA4Obm1sY2W/ozkyRJnd2prlwzK0HDsdfpTaIto1TQie2haezbfZBfUFAgkUi8vLyaHfvo0SOJROLk5ER95HK5VlZWzV4wY7FYCCGqx9h+/fpZWlrOnDlz48aNz549a29TbcfhcBBCDfuuQwjV19dzudzONIsQorpkEggESOtXgtrp9CbRRbR8e2h37F+8eIEQsrCwaHZsTU0NQmj9+vXKm5lFRUUSiUR1m1wu9+rVq+7u7lu3bu3Xr19gYGBtbW3HmlKNerk9dQBGkUgkdXV11tbWnWkWIfT48WOEkKOjI9L6laB2Or1JdBEt3x7aHXtqh9nSIy7U3z4iIqLhEUVGRkarzQ4aNOj8+fMlJSWhoaExMTE//fRTh5tSoW/fvnw+v6ioSDmkoKAAITRkyJDONIsQSkxMRAhNnDgRaf1KUDud3iS6iJZvD+2OvZOTk4GBAXVtrKnevXtzOJz2Pp5VUlKSm5uLELKwsNi+ffvw4cNzc3M71pRqTCZz0qRJqampyq7pExISqB7pO9NsaWlpRESEjY3NV199hbR+JaidTm8SXUH7t4d2x97CwsLX1zc2Nvbw4cNisTg7O7thH+McDmfOnDknT57cv3+/WO8iX+gAAA8uSURBVCyWy+UvXrx49eqV6jZLSkq++eabvLy8+vr6u3fvFhUVubi4dKypVoWFhb1+/fr777+vqanJyMgIDw8PDg52cHCgxiYkJLR6w4Ykyffv3ysUCpIky8vLY2JiRCIRg8E4d+4cdS6n/StBvXR9k1BBb7eHhkcLbbwCXF1dPW/evG7duhkbG7u7u2/YsAEhZGNjc+/ePZIkP3z4EBoaamtrS3UC7evr++DBg3379lHdwvbv37+wsPDgwYPUGrGzs3v8+PGzZ8/c3NzMzMwYDEbPnj3XrVsnk8laaqrV8jIyMkQikfJ03crKys3NLSUlRTkBdTuUzWZbW1uvWrWqrq5OOSo+Pp7P52/ZsqVps7/99tuQIUN4PB6LxTIwMED/fTDL2dl506ZNFRUVDSfGuxI0fwNPdzcJ1VuLfmwPqMmV/P/p6PrUqVMBAQEkdH2t49T4d/T390cInT59uvNNAVwIgoiJiWnYWaAePpMPAFBNx2Kfl5dHtCwwMBB3gUDTYJPogGY6utZmjo6OcA4CGoJNogN0bG8PAOg8iD0AtAOxB4B2IPYA0A7EHgDagdgDQDsQewBoB2IPAO1A7AGgHYg9ALQDsQeAdiD2ANAOxB4A2oHYA0A7zfzwVts6MAN4xcbGwiahZ/7npVovXry4efMmxmp0wqtXr9atW+fk5LR06VLqJWraqeFLlDosIyPj+fPnnW+nK5SXl2/YsMHa2josLAz+x6Sam5ubjY2N8iMBryjogMzMTC8vr1mzZmltl6Z6r6Kiwt3dnclkpqammpmZ4S5Hx+jY23W0hIuLS3R0tI+PT8+ePam3xAJNkkgk3t7eNTU16enpkPkOYGzcuBF3DTrJwcHB2tp6xYoV3bt3d3Z2xl0OjUilUh8fn5ycnOvXr/fr1w93OToJ9vYd99e//rWkpGTp0qXW1ta+vr64y6EFkiRDQkJSUlKSkpKUnZqA9oLYd8r3339fWVk5c+ZMS0tLDw8P3OXov9DQ0OPHj8fFxbm6uuKuRYfBJb3OUigUAQEBV65cuX79+rBhw3CXo8/27du3ePHiI0eOBAcH465Ft0Hs1aC+vn7y5Mm5ubnp6el9+vTBXY5+io6ODgoK2rlz54oVK3DXovMg9uohFos9PT3fv3+fnp5uaWmJuxx9c/Xq1UmTJi1evDg8PBx3LfoAYq82JSUlIpHI0tIyOTnZ2NgYdzn64/fffx87duzUqVMjIyO1+fkoHQKxV6eCggJ3d/cRI0bExcUxmXC5VA0KCwtFIpGTk1N8fDyLxcJdjp6A2KvZ7du3x44d+/nnn0dGRsITo51UXl4uEolMTU2vXr0KB1BqBIdMajZy5Mhz586dPn16zZo1uGvRbWKxeMKECSRJnj9/HjKvXnAgqn5eXl5Hjx6dNWuWpaXl8uXLcZejk+rr6/38/F6/fp2ent6jRw/c5egbiH2XmDFjRklJycqVK7t37z579mzc5egYhUIxc+bMrKyslJQUuCHaFSD2XWXlypWlpaXz5s3r0aPHhAkTcJejS5YvXx4XF3fx4kV4/KmrkKDLKBSK4OBgHo+XkZGBuxadsXnzZgMDg1OnTuEuRJ/BlfyuJZVKvb29f//99xs3bsBPR1oVGRn5l7/8ZdeuXUuWLMFdiz6D2Hc5iUQybtw46uqUlZUV7nK014ULF6ZNm7Zu3Tr4MXhXg9hrwps3b9zd3VksVmpqqqmpKe5ytFFWVpaXl9eMGTMOHjyIuxb9B7HXkOfPn4tEIqFQmJiYyGazcZejXXJzcz08PEQi0dmzZ+HpRg2A2GvO/fv3R48e7enpGRsby2AwcJejLV6+fOnm5tazZ8/k5GQej4e7HFqAp/Q0x8nJ6ddff01MTFy8eDHuWrRFVVXVpEmT+Hx+fHw8ZF5j4IBKozw9PWNiYnx8fGxsbNauXYu7HMxqa2unTJlSWVl58+ZNeBOmJsErNDXNwcGhR48eK1assLGxGT58OO5ysJHL5YGBgX/88ce1a9eEQiHucugF9vYYhISEvHz5MiQkxMzMzMfHB3c5GJAkGRISkpiYmJSUNGDAANzl0A/OZ4XobdGiRVwuNy0tDXchGKxZs4bBYPz666+4C6EpuJKPjVwuDwgISEpKSk1NHTJkCO5yNOfAgQMLFy48dOjQV199hbsWmoLY41RbWzthwoQnT56kp6fb2dnhLkcTYmJiZsyYsX379u+++w53LfQFscesqqrK09NTKpWmpaWZm5vjLqdrXbt2beLEiXPnzt23bx/uWmgNYo9fSUmJm5ublZVVcnKykZER7nK6Sk5OzujRoz/77LMTJ07AmzDxgthrhfz8fHd3d2dn519//VUvn0598uSJSCQaOHBgfHw8PJuMHcReW9y6dWvs2LHTpk07duyYnr17s7y83N3dnc/nX7t2jc/n4y4HwMO5WsPZ2TkmJiY6OjosLAx3LepUXV09ceJEuVx+8eJFyLyWgNhrkcmTJ//888/btm3btWtX07FisVjzJbVL0wqlUqm/v39xcXFCQgK8CVOL4HxoADRn+/btBgYGMTExyiEKhWLlypXBwcEYq2pVbW1tnz59rly5ohyiUChmz57N5/P/+OMPjIWBpiD22mjZsmUsFuvSpUskSdbX18+cORMhxGKx3rx5g7u0Fv38888IISaTGRUVRQ1puBRAq0DstZFyP3njxo0JEyZQP85nMpk7duzAXVqLhg0bRt2WIwhi586d27Zta3TMArQHXMnXUvX19ePHj79z505tba1MJqMG9uzZs7i4WAtf0ZGZmenq6qr8SBCEgYFBREQEvFlAO8ElPS1VUlJSVFRUV1enzDxC6NWrV/Hx8RirasnevXsNDQ2VH6ldSlZWllQqxVgVaAns7bXRgwcPvLy8KisrG8WGyWR6enomJSXhKqxZ5eXlvXr1appwBoMxevTouLg4uG+nbWBvr3WuX78+atSoioqKpkGSyWRXr159/PgxlsJacujQoWZ3HnK5PC0t7ZNPPqmoqNB8VUAFiL3WuXr1qlQqbelBPSaTuX//fg2XpIJMJtuzZ0/DM5GGSJJ8/fr13bt3NVwVaAW+q4mgRc+fP583b56BgUHDE2YlHo8nFotx1/gfZ86cafb/UIaGhgKB4Mcff6ytrcVdI2gM9vbayMbG5t///ndOTs6UKVMQQo1+nPPhw4cTJ05gKq2x3bt3N/o5naGhIZPJnD9/flFRUWhoKIfDwVUbaAlc0tN2ycnJK1asyM7OJghCoVAghAiCsLe3f/ToEfZf7Dx8+HDQoEHKTcjQ0FAmk/n4+ISHh/ft2xdvbUAF2NtrOy8vr7t378bExNjY2FD7VZIk8/PzU1NTcZeG9u7dSx2JUP8ViUR37tyJjY2FzGs7zCcZoM3q6ur+/ve/m5iYGBoaEgQxbdo0vPWIxWIul4sQIghiyJAhSUlJeOsBbQcH+Wrm7+/fpe1LpdK8vLz8/HySJCdNmkQFD4uCgoI///yTy+UOHjzY1ta2S+fl6uq6fPnyLp0FrUDs1YwgCBcXFxsbmy6di0Qiyc3N5fF4AwcO7NIZqXD9+vVevXoJhcKufkNWZmami4vL6dOnu3QutKKH72/CbtmyZdOnT9fAjF69emVtba2BGTVVW1v74cMHzXTa3dUHUDQEsddhuDKPEOJyuRjPL0AnwZV8AGgHYg8A7UDsAaAdiD0AtAOxB4B2IPYA0A7EHgDagdgDQDsQewBoB2IPAO1A7AGgHYg9ALQDsQeAdiD2WmrevHl8Pp8giD///LO9Y1uiUCgiIiLc3Nw6VlJUVBRBEG35elcUD9QIYq+lDh069O9//7tjY5uVn58/evTo5cuXSySSjpUUFRUlFAozMjIKCgpUT6n24oF6Qexp4d69e6tXr54/f/6wYcM61kJFRUVubu4PP/yAEDp27JhaqwOaBrHXXqrfh92ut2UPHTr0zJkzQUFBbDa7Y8WcOnVq8uTJ3t7eHA4nMjKy1XexqbF4oHYQewzS0tIGDhxoYmLC4XAGDx586dIlajhJkuHh4Q4ODmw228TEZNWqVQ2/pXpsZyQmJgoEgq1bt6qYJioqysfHh8/njx8//tmzZ2lpaY0mwFU86ACIPQavX78OCAh49uxZSUmJsbFxUFAQNTwsLCw0NDQkJOT169elpaWrV69u+C3VYztDLpcjhKi+N5pVXFz86NGj0aNHo/++2a7pcT6u4kFH4HtXt35CCMXExLR9+m3btiGEysrKJBIJj8f79NNPlaNOnjyJELp79y5JkqrHtt2oUaOGDh3arq+QJLl9+/Y5c+ZQ/66qqmKz2QKBQCKRKCfo0uL9/Pz8/PzaWzNQAfb2mFGdW8rl8oKCAolE4uXl1exkqsd2NeoIn/q3QCAYP368WCyOi4trY3l4iwdNwZtzMbh48WJ4ePiDBw/EYrGyE/sXL14ghCwsLJr9iuqxXer+/fs5OTlTp05tNPzYsWOBgYHUv7W2eNAs2NtrWnFx8bRp06ysrLKysqqqqnbs2EENp3qG/fDhQ7PfUj22S504ceLLL79seIhYWVnJ5XIvX75cWlralvIwFg+aBbHXtJycHKlUumDBgn79+nE4HOWtLCcnJwMDg5SUlGa/pXps1yFJMjo6euHChQ0HmpmZ+fv7y+XyqKiotpSHq3jQEoi9plHdxSUlJdXV1eXn52dlZVHDLSwsfH19Y2NjDx8+LBaLs7OzDx48qPyW6rGdlJCQ0NINvJs3bwoEApFI1Gj4/PnzUYPr+RiLBx2B6VKi3kJtuJIfGhpqbm5uamrq7++/d+9ehJBQKCwuLq6urp43b163bt2MjY3d3d03bNiAELKxsbl37x5JkqrHqpaRkSESiZS96FhZWbm5uaWkpFBj4+Pj+Xz+li1bGn1r7ty5RkZGTCZz6NChd+7cUQ7fvHmzsqlevXrt27ev1fI6UzxcyVc76PpSzQiCiImJ0UwfeDRBPSkAXV+qERzkA0A7EHudl5eXR7RMeY8NACW4b6/zHB0d4UwNtAvs7QGgHYg9ALQDsQeAdiD2ANAOxB4A2oHYA0A7EHsAaAdiDwDtQOwBoB2IPQC0A7EHgHYg9gDQDsQeANqB2ANAO/B2HTUjCMLFxcXGxgZ3IfojMzPTxcUF3q6jRvB7ezXz8/PDXYK+cXFxcXV1xV2FXoG9PQC0A+f2ANAOxB4A2oHYA0A7EHsAaOf/AXvCNWPIjgTIAAAAAElFTkSuQmCC\n","text/plain":["<IPython.core.display.Image object>"]},"metadata":{"tags":[]},"execution_count":17}]},{"cell_type":"markdown","metadata":{"id":"Ec2ttHKTiKgB"},"source":["#### 3. dot\n","- dot() performs inner product operation between two layer results\n","- 'axes' should be defined to perform the operation"]},{"cell_type":"code","metadata":{"id":"RJunLOtiiKgC","executionInfo":{"status":"ok","timestamp":1605303477275,"user_tz":420,"elapsed":324,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"12346b33-66dd-4ab0-9100-5a26b58e241b","colab":{"base_uri":"https://localhost:8080/"}},"source":["# creating layers\n","input_layer = Input(shape = X_data.shape[1:])\n","activation_1 = Activation('relu')(input_layer)\n","hidden_layer_1 = Dense(50, activation = 'relu')(activation_1)\n","hidden_layer_2 = Dense(50, activation = 'relu')(activation_1)\n","dot_layer = dot([hidden_layer_1, hidden_layer_2], axes = -1)\n","print(hidden_layer_1.shape)\n","print(hidden_layer_2.shape)\n","print(dot_layer.shape)"],"execution_count":18,"outputs":[{"output_type":"stream","text":["(None, 50)\n","(None, 50)\n","(None, 1)\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"9SOcvh3Oixkp","executionInfo":{"status":"ok","timestamp":1605303478056,"user_tz":420,"elapsed":406,"user":{"displayName":"Buomsoo Kim","photoUrl":"","userId":"18268696804115368229"}},"outputId":"2291d212-3990-4993-e9b3-cbc7e11798bf","colab":{"base_uri":"https://localhost:8080/","height":369}},"source":["model = Model(inputs = input_layer, outputs = dot_layer)\n","plot_model(model)"],"execution_count":19,"outputs":[{"output_type":"execute_result","data":{"image/png":"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\n","text/plain":["<IPython.core.display.Image object>"]},"metadata":{"tags":[]},"execution_count":19}]}]}